package org.test;

import java.io.FileInputStream;

import org.eclipse.jetty.server.Connector;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.webapp.WebAppContext;
import org.eclipse.jetty.xml.XmlConfiguration;

/**
 * 本文作为jetty的初体验体会，着重于怎样移植webapp到jetty，以及如何快速在jetty上部署webapp，也尝试了嵌入方式启动webapp，
 * 这些工作在找到方法后很轻松（实际上我可找了很久）。主要是完成你的webapp对jetty的配置，然后start！
 * 本文并没有重点讨论jetty.xml的配置，这部分内容可以根据官方文档和看jetty自带的examples来学习，以后有时间看了再说。
 * 
 * 注意： jetty6是基于servlet2.5和jsp2.1设计的，
 * 几个核心包是jetty-6.1.11.jar、jetty-util-6.1.11.jar、servlet-api-2.5-6.1.11.jar；
 * 如果以嵌入式启动
 * ，需要引用jsp2.1包，我一开始引用的是jsp2.0包，结果造成了一些方法调用对不上参数的问题，明显是class版本有差别，换用jsp2.1就可以了。
 * 另外对于嵌入式，/lib/naming和/lib/plus下的包最好也全部引入。 有时候jetty配置文件中会有如下引用jetty.home等变量
 * <Set name="config"><SystemProperty name="jetty.home"
 * default="."/>/etc/realm.properties</Set> 需要在启动程序配置中加上vm参数，如果是jetty.home,则加上
 * -Djetty.home=D:/devworkspace/jetty-6.1.11
 * 
 * @author Guodeqi
 *
 */
public class Main {

	public static void main(String[] args) throws Exception {
		String jetty_home = "";
		Server server = new Server();
		Connector connector = new SelectChannelConnector();
		connector.setPort(9999);
		server.setConnectors(new Connector[] { connector });
		WebAppContext webapp = new WebAppContext();
		webapp.setContextPath("/" + jetty_home);// 上下文路径 比如说/jettytest
		webapp.setResourceBase("src/main/webapp");// 你的资源文件所在的路径 一般都在这下面
		webapp.setDefaultsDescriptor("src/main/webapp/forJetty/webdefault.xml");
		server.setHandler(webapp);
		server.start();
		server.join();
	}

	/**
	 * 使用配置文件 启动
	 * 
	 * @throws Exception
	 */
	public static void byXML() throws Exception {
		Server server = new Server();
		XmlConfiguration configuration = new XmlConfiguration(
				new FileInputStream(
						"D:\\teamwork\\jettytest\\WebRoot\\etc\\jetty.xml")); // 指定自定义的jetty.xml路径
		configuration.configure(server);
		server.start();
	}

}
